package com.zhitan.ems.oss.utils;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.PostConstruct;
import java.io.InputStream;
import java.util.Map;
import com.zhitan.ems.oss.service.IFileStorageService;

/**
 * OSS工具类
 * 提供静态方法方便调用文件存储服务
 * 
 * @author zhitan
 */
@Component
public class OssUtils {
    
    private static IFileStorageService fileStorageService;
    
    @Autowired
    @Qualifier("fileStorageService")
    private IFileStorageService service;
    
    @PostConstruct
    public void init() {
        fileStorageService = service;
    }
    
    /**
     * 上传文件
     * 
     * @param file 上传的文件
     * @return 文件访问路径
     */
    public static String uploadFile(MultipartFile file) {
        checkService();
        return fileStorageService.uploadFile(file);
    }
    
    /**
     * 上传文件
     * 
     * @param file 上传的文件
     * @param fileName 自定义文件名
     * @return 文件访问路径
     */
    public static String uploadFile(MultipartFile file, String fileName) {
        checkService();
        return fileStorageService.uploadFile(file, fileName);
    }
    
    /**
     * 上传文件
     * 
     * @param inputStream 文件输入流
     * @param fileName 文件名
     * @param contentType 文件类型
     * @return 文件访问路径
     */
    public static String uploadFile(InputStream inputStream, String fileName, String contentType) {
        checkService();
        return fileStorageService.uploadFile(inputStream, fileName, contentType);
    }
    
    /**
     * 删除文件
     * 
     * @param filePath 文件路径
     * @return 是否删除成功
     */
    public static boolean deleteFile(String filePath) {
        checkService();
        return fileStorageService.deleteFile(filePath);
    }
    
    /**
     * 获取文件信息
     * 
     * @param filePath 文件路径
     * @return 文件信息
     */
    public static Map<String, Object> getFileInfo(String filePath) {
        checkService();
        return fileStorageService.getFileInfo(filePath);
    }
    
    /**
     * 下载文件
     * 
     * @param filePath 文件路径
     * @return 文件输入流
     */
    public static InputStream downloadFile(String filePath) {
        checkService();
        return fileStorageService.downloadFile(filePath);
    }
    
    /**
     * 获取文件URL
     * 
     * @param filePath 文件路径
     * @return 文件URL
     */
    public static String getFileUrl(String filePath) {
        checkService();
        return fileStorageService.getFileUrl(filePath);
    }
    
    /**
     * 获取当前存储类型
     * 
     * @return 存储类型
     */
    public static String getStorageType() {
        checkService();
        return fileStorageService.getStorageType();
    }
    
    /**
     * 检查服务是否初始化
     */
    private static void checkService() {
        if (fileStorageService == null) {
            throw new RuntimeException("OSS服务尚未初始化，请检查配置");
        }
    }
}